/**
 * Universidad del Valle de Guatemala
 * Algoritmos y estructura de Datos
 * @autor Luis Carlos Velasquez   11365
 * Sección: 20
 * 08 de julio, 2012
 * Programa que permite utilizar la interfaz de Radio.
 */

package hoja_uno;

import java.util.ArrayList;

public class Uso_Radio implements Radio {
    
    
    //------------------------------------------------------------------------
    //Atributos:
    //------------------------------------------------------------------------
    
    private boolean encendido,AM,FM;
    private int actualAM;
    private float actualFM,frecuencia;
    //Guardamos las frecuencias de AM y FM:
    private Float[] frecuenciasFm = new Float [13];
    private Integer[] frecuenciasAm = new Integer [13];
    
    //------------------------------------------------------------------------
    //  Constructor:
    //------------------------------------------------------------------------
    
    /**
    * Establecemos valores de inicio por defecto al encender la banda es FM.
    */
    public Uso_Radio(){
        encendido=false;
	AM=false;
	FM=true;
	actualAM=AM_MIN;
	actualFM=FM_MIN;
    }
    
    /**
     * Encendemos  o apagamos el radio.
     */
    @Override
    public void onOff() {
        if(encendido==false)
        {
            encendido=true;
        }
        else
            encendido=false;
    }

    /**
     * Cambiamos a FM o AM dependiendo del estado inicial 
     */		
    @Override
    public void cambiarBanda() {
        if (FM==true)
        {
            FM=false;
            AM=true;
            frecuencia=actualAM;	
        }
        else
        {
            FM=true;
            AM=false;
            frecuencia=actualFM;
        }
    }

    /**
     * Cambiamos la frecuencia, el Delta depende la banda
     */
    @Override
    public void cambiarFrecuencia() {
        if (FM==true)
        {
            if(actualFM<FM_MAX)
            {
                actualFM=actualFM+FM_D;
            }
            else
            {
                actualFM=FM_MIN;
            }

        }
        else
        {
            if(actualAM<AM_MAX)
            {
                actualAM=actualAM+AM_D;
            }
            else
                actualAM=AM_MIN;
        }
    }

    /**
     * Guardamos la estacion, recibe como parametro el boton
     * @param boton
     */
    @Override
    public void guardarEstacion(int boton) {
        if (encendido==true){
            if (encendido==true){
                if (FM==true)
                {
                    frecuenciasFm[boton]=actualFM;
                }
                else
                    frecuenciasAm[boton]=actualAM;
            }
        }
    }

    /**
     * Cargamos la estacion, recibe como parametro el boton
     * @param boton
     */
    @Override
    public void seleccionarEstacion(int boton) {
        if (encendido==true){
            if (FM==true)
            {
                if (frecuenciasFm[boton]!=null){
                    actualFM = (Float) frecuenciasFm[boton];
                }
            }
            else{
                if (frecuenciasAm[boton]!=null){
                    actualAM = (Integer) frecuenciasAm[boton];
                }
            }
        }
            
    }
    
    /**
     * Obtenemos la frecuencia actual dependiendo de la banda.
     * @return frecuencia
     */	
    @Override
     public float getFrecuencia()
     {
             if (FM==true)
             {
                frecuencia=actualFM;
             }
             else
                frecuencia=actualAM;

             return frecuencia;
     }

     /**
      *Obtenemos el estado del radio; devuelve true de estar encendido
      * y false de lo contrario.
      * @return encendido
      */	
    @Override
     public boolean isOn()
     {
        return encendido;
     }

     /**
      *@return Obtenemos el estado de AM; devuelve true de estar encendido
      * y false de lo contrario.
      * @return AM
      */	
    @Override
     public boolean isAM()
     {
             return AM;
     }

     /**
      *Obtenemos el estado de FM; devuelve true de estar encendido
      * y false de lo contrario
      *@return FM 
      */	
    @Override
     public boolean isFM()
     {
         return FM;
     }
     
    //------------------------------------------------------------------------
    //toString:
    //------------------------------------------------------------------------

    @Override
    public String toString() {
        if (encendido==false){
            return "El radio está apagado";
        }
        else{
            if (FM==true){
                return "El radio está encendido \n FM " + actualFM;
            }
            else{
                return "El radio está encendido \n AM " + actualAM;
            }
        }
    }
     
     
}

